/*
 *
 *	(GNU GPL) kobey
 *	这是对栈空间的一个简单测试用例，主要用于我个人分析栈的一些理论知识
 *	
 *	1，栈的申请和释放全部是系统自动完成，所以不存在内存泄露的问题，我们可以使用alloca接口
 *		来申请栈段的内存，也可以理解为，在栈段中申请内存，然后不用手动释放。
 *
 *	2，栈的扩展
 *		我们知道堆是通过brk或者sbrk来扩展和释放堆内存，但是栈又是怎么做到的呢？
 *
 *		答案：不需要任何系统调用扩展栈指针，在需要空间的时候，就给多少空间。
 *		在我们压栈的时候，会触发page fault，然后通过内核中的页故障处理函数来
 *		分配对应的物理内存。
 *
 *	3，栈的释放
 *		不好意思，Linux进程中的栈只能增加，不会减少
 *		栈的大小，等于进程执行时间所使用的最大的栈空间（可以复用）。
 *
 *	4，为什么这样设计
 *		1）没有合适的事件来触发栈段内存的回收，也许能找到事件，但是权衡后觉得没有更好
 *		2）这样我们栈的使用更高效，用空间换时间。
 *
 *
 *
 * */


#include <stdio.h>

int g_num = 10000;

/*递归*/
int funca() {
	g_num--;
	if(g_num == 0) return 0;
	funca();
}

int main()
{
	funca();
	pause();
	return 0;
}
